import {Physics} from 'phaser'

export class Actor extends Physics.Arcade.Sprite {
  protected hp = 100
  constructor(
    scene: Phaser.Scene,
    x: number,
    y: number,
    texture: string,
    frame?:string | number
  ) {
    super(scene, x, y, texture, frame);//创建精灵

    scene.add.existing(this);//添加到场景
    scene.physics.add.existing(this);//启用物理体，添加到物理世界中,确保对象能正确渲染并参与物理模拟

    this.getBody().setCollideWorldBounds(true);
  }

  public getDamage(value?: number): void {
    //this.scene.tweens.add() 方法用于创建和管理动画过渡（tweens）
    this.scene.tweens.add({
      targets: this, //目标对象，当前实例
      duration: 100,
      repeat: 3,
      yoyo: true, //启用反向动画
      alpha: 0.5,
      onStart: () => { //动画开始执行回调
        if(value) {
          this.hp = this.hp - value //减少hp值
        }
      },
      onComplete: () => { //动画完成时执行的回调
        this.setAlpha(1) // 将 alpha 设置回 1（完全不透明）
      }
    })
  }

  public getHPValue():number {
    return this.hp;
  }

  //封装-根据角色的水平速度来翻转角色的显示方向
  protected checkFlip(): void {
    if (this.getBody().velocity.x < 0) { //检查物理体在x轴上的速度
      this.scaleX = -1 //速度为负，角色向左移动,scaleX 设置为 -1
    } else {
      this.scaleX = 1 //速度为正，角色向右移动，scaleX 设置为 1
    }
  }

  //封装-物理系统body属性
  protected getBody():Physics.Arcade.Body {
    return this.body as Physics.Arcade.Body
  }
}
